home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
INFO
/
DOSIMP10.ZIP
/
SIMPLY1.HYP
< prev
next >
Wrap
Text File
|
1991-08-12
|
115KB
|
1,969 lines
|Tby Kari M. Jackson|T
|TDDDDDD OOOO SSSS |T
|TDD DD OO OO SS SS|T
|TDD DD OO OO SS |T
|TDD DD OO OO SS |T
|TDD DD OO OO SSS |T
|TDD DD OO OO SS |T
|TDD DD OO OO SS|T
|TDD DD OO OO SS SS |T
|TDDDDDD OOOO SSSS |T
(Disk) (Operating) (System)
|TSimply Said,|T
|TSimply Done,|T
|TSIMPLY EASY!|T
|TVersion 1.0|T |T(c)1991|T
<page down> for menu
Main Menu
-=|sWhat Is DOS?|s=- -=|sAbout This Program|s=-
╔═════════╗
APPEND |sDATE|s/|sTIME|s FDISK MKDIR » SHARE ║ DOS 5.0 ║
ASSIGN DEBUG FILES MODE » SHELL ╚═════════╝
ATTRIB » |sDEL|s/|sERASE|s FIND MORE SHIFT DEVICEHIGH
» BACKUP DEVIC|1E FOR NLSFUNC SORT DO|1S
BREAK » DIR FORMAT » PATH STACKS » DOSKEY
BUFFERS DISKCOMP GOTO PAUSE SUBST EDIT
CALL DISKCOPY GRAFTABL PRINT SWITCHAR EMM386
CHCP DOSSHELL GRAPHICS PROMPT SWITCHES EXPAND
CHDIR DRIVPARM GWBASIC » RECOVER SYS HELP
CHKDSK ECHO IF REM TREE LOADFIX
CLS EDLIN INSTALL RENAME TRUENAME LOADHIGH
COMMAN|1D EXE2BIN JOIN REPLACE » TYPE MIRROR
COMP EXIT KEYB RESTORE VER QBASIC
» COPY FASTOPEN LABEL RMDIR VERIFY SETVER
COUNTRY FC LASTDRIVE SELECT VOL UNDELETE
CTTY FCBS MEM SET » XCOPY UNFORMAT
<page down> for more subjects
» ASCII Floppy » Memory » Device|1s
» Attributes Fragmented ══════ ═══════
BIOS Hidden Files » CMOS AUX
» |sBoot|s/|sReboot|s » Keyboard Conventional CLOCK$
» Boo|1t Disk Logical Drives EMS COM1
Bytes Macros Expanded CON
Cache Multitasker Extended LPT1
COMSPEC NOT High NUL
Concatenation Overlay LIM PRN
Current Parameters Protected Mode
Default Parent RAM
» Directory POST Real Mode
» Disks RAMdisk ROM CPU
» Editing Keys » Redirection Shadow ═══
Environment Replaceable » TSR 8088
ERRORLEVEL Root Upper 286
» Executable » Shelling Out XMS 386
EXIST Virtual Disk AT
FAT » Wildcards XT
<page down> for more subjects
Error Messages Files
══════════════ ═════
Abort, Retry, Fail, Ignore *.* HIMEM.SYS
Access denied » ". and .." IBMBIO.COM
Bad command or filename ANSI.SYS IBMDOS.COM
Disk full » AUTOEXEC.BAT IO.SYS
File creation error » Batch File MSDOS.SYS
Invalid COMMAND.COM » COMMAND.COM RAMDRIVE.SYS
Non system disk » CONFIG.SYS SMARTDRV.SYS
Out of environment space Device Driver VDISK.SYS
DRIVER.SYS
» Caution! Numbering Systems
════════ ═════════════════ » Software Distribution Methods
Cleaning Binary ═════════════════════════════
Low-Level Decimal BBS Freeware
Magnetism Hexadecimal Commercial Public Domain
Park Demo Shareware
Power Downloading
Write-protect
-=|sTrademarks|s=-
The |TSHELL|T and |tCOMSPEC|t Commands
Many experts say that it is just good sense to have a "clean" root direc-
tory. That means you want to have the smallest possible number of files
in the |nroot|n directory. Many people will try to tell you that COMMAND.COM
is one of the files that must remain in the |nroot|n |ndirectory|n, but this is
just not true.
When you boot your computer, the first files loaded into memory are the
Hidden files, which are named |tIO.SYS|t and |tMSDOS.SYS|t if you use MS-DOS, or
|tIBMBIO.COM|t and |tIBMDOS.COM|t if you use PC-DOS. (These two |nHidden files|n
must be in the |nroot|n |ndirectory|n of the boo|1t disk, and in most versions of
DOS they must be the first two files stored on the disk, or they will not
be found and you will receive the "|tNon system disk|t replace and strike any
key" message.) Next, a file called CONFIG.SYS (which must always be in
the |nroot|n |ndirectory|n in order to be located by DOS) is read, then COMMAND
.COM is loaded. DOS looks in the |nroot|n |ndirectory|n to find |nCOMMAND.COM|n.
However, if there was a |nSHELL|n statement in |nCONFIG.SYS|n, then DOS will in-
<page down> for more
SHELL and COMSPEC continued
stead search the directory indicated there! Next, COMMAND.COM reads and
executes each line of your AUTOEXEC.BAT file, if one is present in your
root |ndirectory|n. After this process is complete, you are greeted by a DOS
prompt.
Now if you run a program which requires a great deal of memory, the tran-
sient portion of |nCOMMAND.COM|n will drop out of |nmemory|n, to leave room for
this program. Therefore, the first thing that DOS needs to do when you
exit from this program, is to reload |nCOMMAND.COM|n. However, this reload-
ing cannot use the |nSHELL|n statement in CONFIG.SYS to find the |ndirectory|n
where |nCOMMAND.COM|n resides. |nCONFIG.SYS|n can only be read by DOS during
|sboot|sup. But DOS knows that it should check the environment for a vari-
able called |nCOMSPEC|n. The |nCOMSPEC|n variable tells DOS where to look to re-
load |nCOMMAND.COM|n, whereas the |nSHELL|n statement tells DOS where to look to
find |nCOMMAND.COM|n during bootup. Therefore you need both of these items
if you want to move |nCOMMAND.COM|n out of the |nroot|n |ndirectory|n.
There are two ways to set this |nCOMSPEC|n |nenvironment|n variable:
<page down> for more
SHELL and COMSPEC continued
1. The |nCOMSPEC|n statement in the AUTOEXEC.BAT. You could also enter this
command from the command line if you ever want to. Here it is:
|nSET|n |nCOMSPEC|n=C:\DOS\|nCOMMAND.COM|n
(That is assuming that DOS is the name of the directory to which you have
moved COMMAND.COM.) However, there's no sense cluttering up your AUTOEX-
EC.BAT file with this line, when there is a much easier way to set this
variable.
2. The |nSHELL|n statement in CONFIG.SYS. Most people will tell you that
the |nSHELL|n statement should look like this:
|nSHELL|n=C:\DOS\|nCOMMAND.COM|n /P
However, this will not set the |nCOMSPEC|n variable in the environment.
With just a slight change to the |nSHELL|n statement, though, like this:
|nSHELL|n=C:\DOS\|nCOMMAND.COM|n C:\DOS /P
the second occurrence of the name of the |ndirectory|n will tell DOS to set
the |nCOMSPEC|n variable. It seems redundant, but it is necessary to do
this, or when you exit a large program you will receive this message:
"|tInvalid COMMAND.COM|t system halted", because if the |nCOMSPEC|n variable is
set incorrectly, then DOS has no way of finding |nCOMMAND.COM|n. There is
<page down> for more
SHELL and COMSPEC continued
nothing you can do about that except reboot.
So remember, you can move COMMAND.COM out of the root directory and in-
to a subdirectory, but only if you use the proper syntax for the |nSHELL|n
statement in CONFIG.SYS, or else the |nCOMSPEC|n statement in AUTOEXEC.BAT
along with the "popular" syntax of the |nSHELL|n statement.
If you do not move |nCOMMAND.COM|n from the |nroot|n |ndirectory|n, you do not need
the |nSHELL|n statement, unless you want to increase the size of your envir-
onment. If you receive an "|tOut of environment space|t" message, you will
need this line in your |nCONFIG.SYS|n file:
|nSHELL|n=C:\|nCOMMAND.COM|n /E:nnn /P
where nnn = the number of bytes (for DOS 3.2 or later) or the number of
16-byte paragraphs (for DOS 3.1) of environment space you would like to
have. In this case, you do not need to specify the |ndirectory|n name where
|nCOMMAND.COM|n is, twice, since |nCOMMAND.COM|n is in the |nroot|n |ndirectory|n, so
|nCOMSPEC|n will be set automatically. The purpose of this form of the |nSHELL|n
line is only to enlarge the |nenvironment|n.
<page down> for more
SHELL and COMSPEC continued
Of course, if you do have COMMAND.COM in a subdirectory, and you need
more environment space also, you can combine those statements like this:
|nSHELL|n=C:\DOS\|nCOMMAND.COM|n C:\DOS /E:nnn /P
About the size of the |nenvironment|n you want to set: The default is 160
bytes (except for DOS version 5, where the |ndefault|n is 256 |nbytes|n), so if
you've run out of space, obviously you need a higher number than that.
The highest number you can use is 32,767. A good setting is 256 |nbytes|n.
Don't increase it over that unless you run out of space with that set-
ting. Also, the number of |nbytes|n in the |nenvironment|n must be a multiple of
16, or DOS will "round up" and give you a multiple of 16 anyway. And if
you have DOS 3.1, remember to use the number of 16-byte paragraphs, rath-
er than the number of |nbytes|n.
By the way, the purpose of the /P is to cause |nCOMMAND.COM|n to be the pri-
mary command interpreter, as opposed to being a secondary shell which can
be exited from. (See shelling out.) The primary shell runs AUTOEXEC.BAT
whenever it is done loading. If there is no shell statement, AUTOEXEC
<page down> for more
SHELL and COMSPEC continued
.BAT will be called anyway. But if there is a shell statement, then
AUTOEXEC.BAT will only be called if the /P switch is present.
Now the fact that /P causes COMMAND.COM to be the primary shell, is
quite important. If you left out the /P in the shell statement, and
you accidentally typed EXIT at the DOS prompt, then |nCOMMAND.COM|n would
drop out of memory and you wouldn't be able to do anything except re-
boot.
One more thing about the |nCOMSPEC|n environment variable. The default set-
ting is the root directory of the disk you booted from, unless you tell
DOS otherwise. So if you have a hard drive, but you sometimes |nboot|n from
a floppy disk, then when you do, you'll probably want to issue a command
such as |nSET|n COMSPEC=C:\DOS\COMMAND.COM depending on where your COMMAND
.COM file really is, so that DOS will use that copy instead of always
asking you to "Place disk with |nCOMMAND.COM|n into drive A:" every time you
exit from a large program after having booted from the |nfloppy|n drive.
The |tEnvironment|t
(See also SHELL.)
The |nenvironment|n is a sort of a scratch pad that DOS and many applications
programs know how to use for certain purposes. Certain functions of DOS
know that if they need some information, this information can possibly be
found in the |nenvironment|n, and memory is set up in such a way that these
functions know where to look to find the |nenvironment|n. So, if you set
these information variables in the |nenvironment|n, then the information will
be there when it is needed.
The variables that DOS can use are COMSPEC, PATH, and PROMPT. Also any
batch file can use variables that have been placed into the |nenvironment|n
using the SET command. Many programs are written so that they know to
look for a certain variable in the |nenvironment|n. For example, many pro-
grams need to use files other than the main executable program file while
they're running. Programs will look for these files in the current dir-
ectory, whatever directory you were in when you first loaded the program.
Some programs though, know that if the files are not located in the cur-
<page down> for more
Environment continued
rent directory, they may be located in a |ndirectory|n specified by a certain
variable in the |nenvironment|n. So if you have previously set that particu-
lar variable to be equal to the |ndirectory|n where these files are located,
then the program will be able to find these overlay files.
Suppose the manual to your word processor says that the program knows
how to search for files in a |ndirectory|n specified by a WORD variable.
And suppose all your word processing files are in a |ndirectory|n called
WP. Then what you want to do is put this line into your AUTOEXEC.BAT
file:
|nSET|n WORD=C:\WP
Now your word processor will always be able to find its files, even if
you do not change to the WP |ndirectory|n before you start the program.
If a program uses |nenvironment|n variables in this way, it will be men-
tioned in the installation chapter in that program's manual.
DOS version 5 uses two more |nenvironment|n variables than previous versions.
The DIRCMD variable which relates to the DIR command, and the TEMP vari-
able which is for redirection and for the DOSSHELL.
File |tAttributes|t
A file can have any of four |nattributes|n, which can be turned on or off by
the ATTRIB command. (DOS versions previous to 5.0 can only alter the R
and A |nattributes|n. If you need to alter an H or S attribute and you have
an older version of DOS, there are many utilities that can do it, such as
PC Tools, Norton, and several public domain or freeware ones such as HIDE
.COM from PC Magazine.) The |nattributes|n for each file are stored in the
directory. The possible |nattributes|n are Hidden, System, Archive, and
Read-only. (The word "attributes" can also refer to screen colors.)
|tHidden files|t can be executed, but they cannot be deleted, updated, cop-
ied, or even seen in a |ndirectory|n listing. Many programs give a Hidden
attribute to their most important files, on the assumption that since you
can't see them in a |ndirectory|n listing, you won't know they're there, and
you won't try to mess with them. DOS has two |nHidden files|n named IO.SYS
and MSDOS.SYS for MS-DOS, or IBMBIO.COM and IBMDOS.COM for PC-DOS.
The System attribute is quite similar to the Hidden one.
<page down> for more
Attributes continued
The Archive attribute is turned on every time a file is created, copied
into a directory, or updated in any way. The main purpose of this is so
that a backup program can tell which files need to be backed up. Most
|nbackup|n programs turn the Archive attribute off each time they |nbackup|n a
file, so the program knows that if the Archive attribute is on, the file
has been changed since the last |nbackup|n was done.
A file which has its Read-only attribute set can be executed, read, re-
named, or copied, but can't be deleted or updated. Setting the R attrib-
ute is a good way to save your files from accidental deletion. If you
try to delete a file that has an R attribute, you'll get "|tAccess denied|t".
However, some programs will search for certain companion files that they
need in order to run, and if the companion file has its R attribute set
to on, the program might think the file is missing. So if you ever run a
program which says, "I cannot find my |toverlay|t file named ABCDEF.OVL, I am
aborting myself", even though you can see that the file is in the current
|ndirectory|n, just turn the R attribute for that file off, and the program
should run just fine.
The |tATTRIB|t Command
The syntax for this command is as follows:
|nATTRIB|n +a FILENAME.EXT
where "a" can be the initial of any one of the four file attributes, and
the + is for turning the attribute on. To turn one off, use - instead.
But DOS versions previous to 5 can only work with the R and A |nattributes|n.
A very little-known use for the |nATTRIB|n command, is to search your hard
drive for a file. If you use the |nATTRIB|n command without any +a or -a,
it will just show you the names of the specified files, with their at-
tributes displayed next to each. An extra benefit of this is that the
file's entire |spath|sname is included! So now you know in which directory
that file resides! For example, suppose you have a file named ABCDEF
.EXE, and you can't remember where it is. Go to the root |ndirectory|n and
use this command:
|nATTRIB|n ABCDEF.EXE /S
The /S tells |nATTRIB|n to search not only the current |ndirectory|n, but also
every subdirectory below the |ncurrent|n one, so if you start from the |nroot|n,
<page down> for more
ATTRIB continued
the whole drive will be searched. The result may be this:
A R C:\DOS\ABCDEF.EXE
Now you see that the file is in the \DOS directory.
The |nATTRIB|n command also fully supports wildcards. For example, you can
set the R attribute of every .EXE file on the drive with the command AT-
TRIB +R *.EXE /S, if you do it from the root |ndirectory|n. Or, if you want
to find every .BAT file you have on the drive, |nATTRIB|n \*.BAT /S will show
you their full file specifications, even if you're not in the |nroot|n direc-
tory because the backslash (\) tells DOS to start the search in the |nroot|n.
In DOS version 5, this command works on H and S attributes as well as A
and R ones. But you can't do anything with a file that has H and/or S
until those two |nattributes|n are gone. If you have a file with all four
|nattributes|n, and you want to remove the A, for example, you can't do it
while the file has H and S, so |nATTRIB|n -H -S -A FILE.EXT will do it. If
you wanted that file to keep its H and S, then put them back with |nATTRIB|n
+H +S FILE.EXT. Yes, it is ok to change more than one attribute on one
command line like that.
The |t". and .."|t Directory Entries
What on earth are these things? They appear at the top of every direc-
tory on my hard drive, except the root |ndirectory|n! What are they? The .
stands for the current |ndirectory|n, and the .. stands for the parent direc-
tory. You can use them as a form of shorthand. If you want to delete
every file in the |ncurrent|n |ndirectory|n, you can type:
|nDEL|n |n*.*|n
or you can save typing those bothersome asterisks by typing:
|nDEL|n .
with the same results.
Suppose you're in a subdirectory of a subdirectory of (etc.) named
C:\WP\LETTERS\OCT1990\JOHN
and you want to change to the |ndirectory|n C:\WP\LETTERS\OCT1990. You can
either type
CD C:\WP\LETTERS\OCT1990
or, since .. stands for the |nparent|n |ndirectory|n of the |ncurrent|n |ndirectory|n,
you can just type:
<page down> for more
". and .." continued
CD ..
with the same results! Won't that save a few thousand keystrokes per
year? Actually you don't even need the space in there, you could type
CD.. just as well.
And remember, when the DOS manual says that you can't remove a directory
until it is empty, it really means until it is empty of everything except
the . <DIR> and .. <DIR> entries! Don't ever try this:
|nDEL|n ..
to empty your |ndirectory|n in preparation for the RMDIR command, since what
that command will do is delete every file in the parent |ndirectory|n!
The |tANSI.SYS|t Device Driver
You can do really great things with this console driver, if you install
it in your CONFIG.SYS file. Edit |nCONFIG.SYS|n to include this line:
DEVICE=C:\DOS\|nANSI.SYS|n
(That is assuming you have the |nANSI.SYS|n file in your DOS directory.) And
reboot your computer. Now you're ready to use |nANSI.SYS|n, but what is it?
It's a |ndevice driver|n that allows you much more control over your |sCON|ssole,
or monitor-and-keyboard. You can change the colors on your screen, or
make your own keyboard macros. This involves using a thing called the
ESCape character. The easiest way to get this character to the screen,
where the ANSI |ndevice driver|n can see it and interpret it, is with the
PROMPT command. One of the metacharacters which are used as parameters
to this command is $e, which will put an ESCape character into your
|nprompt|n. Well this is what it's for.
To change the color of your screen from the dull drab gray-on-black of
normal DOS, here is the |nPROMPT|n command you'll need:
|nPROMPT|n $e[3x;4ym
<page down> for more
ANSI.SYS continued
where 3x is the foreground (text) color, and 4y is the background color.
The color codes, that take the place of the x and the y, are as follows:
0 black 1 red 2 green 3 yellow
4 blue 5 magenta 6 cyan 7 white
Notice that the m at the end of that command must be in lowercase or the
command will not work. It's that simple to make your screen whatever
color you choose. Remember, though, that this changes the PROMPT vari-
able in the environment, so you lose the |nPROMPT|n statement you had already
set up. It will look like you don't have a |nprompt|n at all anymore. So
what you might want to do is add your normal |nPROMPT|n statement to the end
of that one, like this:
|nPROMPT|n $e[3x;4ym$p$g
Now you have both your new color scheme and your old |nprompt|n! Another way
is to use two separate commands, the color changing command, followed by
the regular |nPROMPT|n command to get your normal |nprompt|n back. This would
save space in the |nenvironment|n, because the longer color command would be
replaced by the shorter normal |nPROMPT|n command. If you use this method in
a batch file though, you need to observe the rules mentioned under macros
<page down> for more
ANSI.SYS continued
about the use of multiple PROMPT statements in a batch file.
Now when ANSI changes your screen colors, it will only change what is
written on the screen from that time on. It will not automatically make
your whole screen change. In order to get the whole screen filled with
your new colors, all you need to do is clear the screen with the CLS
command. Another way to clear the screen is to use the ANSI ESCape
sequence 2J. Just add it to the end of your color-changing command:
|nPROMPT|n $e[32;40m$e[2J
This time the J ANSI command must be in uppercase, as opposed to the m
and p ANSI commands which must be in lowercase. Now remember, if you use
this method of clearing the screen, don't add your normal |nprompt|n to the
end of it. You must give a normal |nPROMPT|n command separately, and after
that one that includes 2J, or else the screen will be cleared every time
you hit <Enter>, before you get a chance to see the result of the command
you just entered.
Using ANSI to set up keyboard |tmacros|t is just as easy! A |nPROMPT|n command
<page down> for more
ANSI.SYS continued
for that purpose would look like this:
|nPROMPT|n $e[0;68;"DIR";13p
Notice that the p at the end of that command must be in lowercase or the
command will not work. The number combination 0;68 stands for the <F10>
key, and the 13 stands for the <Enter> key. (See the ASCII subject for
the codes for all the function keys.) Therefore, the above PROMPT would
cause the <F10> key to be reassigned as |nDIR|n <Enter>, so every time you
hit the <F10> key, you would automatically get a directory listing. You
can put any command you want into one of these macros, even more than one
command into the same macro. Suppose that you like to clear your screen
before you look at a DIR listing. The following command would set up the
<F10> key to do that for you:
|nPROMPT|n $e[0;68;"CLS";13;"DIR";13p
ANSI will write the parts in quotes exactly the way they are entered.
The parts that are not in quotes are interpreted as decimal |nASCII|n codes.
The quoted strings and the |ndecimal|n |nASCII|n strings must be separated by
semicolons (;).
<page down> for more
ANSI.SYS continued
Another useful code for ANSI macros is 32 which means the <Space> bar.
You might want to reassign a function key to "DIR";32. Notice that one
has a <Space> (32) instead of an <Enter> (13). That way, what it puts on
your screen at the command line, is "DIR " (without the quotes) so that
if you want to add /W or *.EXE or any other parameters to the DIR com-
mand, you can, or if not, just hit <Enter>. Actually, it would be just
as good to assign "DIR " to the key, as to assign "DIR";32, but that was
just to show that 13 for <Enter> is not the only key code that's worth
anything.
Another type of "macro" you can use ANSI for, is rearranging the way your
keyboard is set up. Do you need to use the " a lot more often than the '
and you're tired of hitting the <Shift> key to get to the "? Well, since
the ASCII code for " is 34 and the code for ' is 39, you can do this:
|nPROMPT|n $e[34;39p
|nPROMPT|n $e[39;34p
Now whenever you hit the ' key you'll get " and then to make a ' you'll
have to use the <Shift> key.
<page down> for more
ANSI.SYS continued
This is not a perfect solution, however, because not all applications
recognize ANSI key reassignments. Some programs will still give you '
whenever you hit ' even though you have " assigned to the ' key. But it
can't hurt to try. Maybe your favorite word processor will let you do
these reassignments. At any rate, the changes will work in DOS for sure.
You can put all your keyboard redefinition |sPROMPT|ss, and your color change
|nPROMPT|n into your AUTOEXEC.BAT file or any other batch file. There is one
problem with this, however. Most people like to have ECHO off in their
|nAUTOEXEC.BAT|n file, so the screen stays as clean as possible during |sboot|s-
up. But when |nECHO|n is off, the |nPROMPT|n sequence is not sent to the screen.
So the ANSI ESCape character is not seen by the ANSI driver, so it will
not be acted upon, until the end of the |nbatch file|n, when DOS automatical-
ly turns |nECHO|n back on. But by then it's too late for all but the last of
the |nPROMPT|n strings to be interpreted by the ANSI driver, since each new
|nPROMPT|n statement replaces the old |nPROMPT|n statement in the environment.
The last |nPROMPT|n statement executed is the only one which will be seen by
the ANSI driver, unless |nECHO|n is on while these |nPROMPT|n statements are be-
<page down> for more
ANSI.SYS continued
ing sent to the environment. You don't need to leave ECHO on for the
entire batch file, however, just from the line immediately following the
first PROMPT statement, until the line immediately preceding the last
|nPROMPT|n statement.
There's an easy way to get around this problem, though, if you have DOS
version 3.3 or later. This version added the @ symbol to the list of
|nbatch file|n commands, to suppress the display of any line in a |nbatch file|n.
You still need to have |nECHO|n on for this, but the ugly old |nPROMPT|n lines
will not show on the screen. You just precede each |nPROMPT|n command with
the @ symbol, and then leave a blank line right after that, then the next
@PROMPT line, another blank line, etc. After all your @PROMPT lines and
blank lines, then turn |nECHO|n off for the rest of the |nbatch file|n. And do
not forget to issue a normal |nPROMPT|n command afterward, or else it will
look like you don't have a |nprompt|n at all, since any ESCape sequences sent
to the screen are intercepted and interpreted by the ANSI driver before
they get there.
<page down> for more
ANSI.SYS continued
There are other ways to get the ESCape character to the screen, besides
using the PROMPT command, but they aren't really used so much by begin-
ners. The ESC character can be represented by the ^[ keystroke combin-
ation, but in most text editors or word processors, if you enter ^[, the
same thing will occur as what would happen if you hit the <Esc> key. (A
symbol like ^[ always means to hold down the <Ctrl> key while typing [.)
But most text editors and word processors do have a way to enter control
characters into the text. The DOS command EDLIN uses ^V. If you enter
^V followed immediately by the [ character, then the ^[ (ESC) character
will be inserted into the text. When you enter this into |nEDLIN|n it's go-
ing to look like this on the screen at first: ^V[[31;40m. But if you
later list the file, or save it and edit it again later, you will see
^[[31;40m. The V has disappeared! But that's ok, it's supposed to do
that. The ^V was just there to tell |nEDLIN|n that the [ was supposed to
mean a ^[, and that's what it did, because now it says ^[. But don't
forget, the ^[ represents only the ESCape character, and the combination
that ANSI will recognize as one of its commands, is ESC + [. The [ needs
to follow the ^[ which stands for ESC.
<page down> for more
ANSI.SYS continued
If you have DOS version 5.0, you can use the EDIT command instead of the
EDLIN line editor, because it's easier to use. If you do, ^P + ESC will
do the same thing as ^V + [ does in |nEDLIN|n--give you an ESC character.
Different editors use different methods, however, so if you're not using
|nEDLIN|n or |nEDIT|n, you'll have to check the manual for your editor. Once you
know the method your editor uses to get control characters into the text,
the possibilities are endless. You could create a text file called HELLO
.TXT which looks kind of like this:
ESC[31;40mHi there! (red)
ESC[37;40mHow are you? (white)
ESC[34;40mI am fine. (blue)
ESC[0m (back to normal)
Now when you enter the command |nTYPE|n HELLO.TXT, your screen will show that
text (not including the ugly part) in colors! You can also use a similar
technique in a batch file. Just use the ECHO command, like this:
|nECHO|n ESC[31;40mHi there!
And remember, with |nTYPE|n and |nECHO|n, you do not need to have |nECHO|n on during
<page down> for more
ANSI.SYS continued
this part of the batch file like you do if you're using PROMPT $e to en-
ter the ESCape character, because these commands will send the string to
the screen even if DOS doesn't send the command to the screen.
Of course you use the same techniques to get the ESC character into a
file, whether for the purpose of color, or for the purpose of macros.
To un-assign function keys that have been made into |nmacros|n using ANSI
ESCape sequences, you just reassign them to their normal ASCII code.
For example, if you had the <F10> key reassigned to "DIR";13, you just
need to reassign it back to <F10>, like this:
|nPROMPT|n $e[0;68;0;68p
A few caveats about using ANSI to create |nmacros|n. First, remember that
DOS has its own functions for the <F1> through <F7> keys, so you don't
want to reassign those. But you can reassign <F8> through <F10>, as well
as <Shift-F1> through <Shift-F10>, <Alt-F1> through <Alt-F10>, and <Ctrl-
F1> through <Ctrl-F10>. (Although if you're using DOS version 5 with the
<page down> for more
ANSI.SYS continued
DOSKEY command, you don't want to reassign any keys that it uses either.)
But not all of them! The |nANSI.SYS|n device driver sets aside only a limit-
ed amount of memory for holding these keystroke redefinitions. I can't
tell you how many keys you can assign, because it'll depend on the length
of each macro you're using. But if you have some keys assigned, and try
to assign one more and it won't work, chances are that it's because that
chunk of |nmemory|n is full.
One last thing. Don't expect these macros to work anywhere except in DOS
because most programs have their own uses for the function keys, and will
take over control of them while you're in the program. But as soon as
you exit back to DOS, the |nmacros|n will work again. Some programs will
allow the ANSI reassignment to work though, and it can't hurt to try.
There are also some other very useful ANSI commands, which are probably
listed in your DOS manual, and now that you know more about the ESC char-
acter, you can probably understand that chapter in the manual. And there
are several shareware clones of |nANSI.SYS|n, such as NANSI.|nSYS|n, which work
just the same way only much faster! So check them out and have some fun!
The |tAUTOEXEC.BAT|t File
The |nAUTOEXEC.BAT|n is a very special batch file. As long as it is located
in the root directory of the boo|1t disk, it will automatically be read by
COMMAND.COM every time you restart your system. (Exception: If there is
a SHELL statement in CONFIG.SYS, that does not have the /P switch, then
|nAUTOEXEC.BAT|n will not be run after all.) This file should contain any
commands that you want to have executed with each reboot.
If you load a TSR from |nAUTOEXEC.BAT|n, it should always come earlier in
the file than any PATH, SET, or PROMPT statements, if possible. This is
because every program, including TSRs, that runs under DOS gets its own
copy of the environment. The commands |nPATH|n, |nSET|n, and |nPROMPT|n put variable
strings into the |nenvironment|n. Therefore, if any of these commands are
used before the TSRs are loaded, the TSR's copy of the |nenvironment|n uses
more RAM than is needed.
This is not the case if the TSRs are loaded before any strings are placed
into the |nenvironment|n. Also, if you have any real need to place a string
<page down> for more
AUTOEXEC.BAT continued
into the environment before loading a TSR, then it would be best if you
could also remove that |nenvironment|n string again before loading the |nTSR|n.
The only trouble with placing the PATH statement near the end of AUTOEXEC
.BAT, though, is that DOS won't be able to find the command files for the
commands issued from the |nAUTOEXEC.BAT|n unless the full file specification
for each command is listed on the command line of the batch file. For
example, to load a screen saver called EXPLOSIV into memory, the command
would usually be simply EXPLOSIV if the directory containing the EXPLOSIV
.COM file is listed on the |nPATH|n variable in the |nenvironment|n. But since
the |nPATH|n variable has not yet been set, the command must instead read as
follows:
C:\UTIL\EXPLOSIV
That is providing the EXPLOSIV.COM file is located in the \UTIL |ndirectory|n
of the C: drive. That way, DOS knows exactly where to find the command
file, even without the |nPATH|n variable. Sure, it's a little more typing to
do, but that is not a real problem, since you only need to type this com-
mand once, when you first create your |nAUTOEXEC.BAT|n file.
<page down> for more
AUTOEXEC.BAT continued
If there is no |nAUTOEXEC.BAT|n file located in the root directory of the
boo|1t disk, then DOS will |nprompt|n you for the date and time during each
bootup, just as if you did have an |nAUTOEXEC.BAT|n file that contained just
the DATE and TIME commands.
One thing you do not want to do, if there are any |sTSR|ss loaded from your
|nAUTOEXEC.BAT|n, or if you're not sure, and there might possibly be any TSRs
in there, is execute this file from the DOS prompt by entering AUTOEXEC
as a command. The reason is that any TSRs that are listed in there have
already been loaded into memory, while you booted the computer, and so
executing |nAUTOEXEC.BAT|n again without rebooting, would load a second copy
of those TSRs into |nmemory|n. Well some TSRs realize when they're being
loaded a second time, and just won't go for it. That's fine. Other TSRs
just go ahead and load a second copy. That won't hurt anything, neces-
sarily, but it sure would be a waste of |nmemory|n. But other TSRs, when you
try to load them twice, will lock up the whole computer. Don't execute
AUTOEXEC manually unless you're positive there are no TSRs in it. So if
you make a change to this file and want to see what happens, just reboot
the computer. But have a |nboot|n disk handy first, in case of trouble.
The |tRMDIR|t Command
This command can also be abbreviated as RD. What it does, is to ReMove
any completely empty DIRectory. Before you can remove a |ndirectory|n, you
must remove all subdirectories from it (except the ". and .." entries),
as well as all the files.
The main problem with removing directories is that sometimes a |ndirectory|n
will contain files which have their Hidden, System, or Read-only attrib-
utes turned on. These files must first be deleted, but in order to del-
ete them, those attributes must be removed with the ATTRIB command.
Another problem with removing directories is that you cannot remove the
current |ndirectory|n. You must change to a different |ndirectory|n first, using
the CHDIR command.
See the section on the MKDIR command for the syntax of this one, since
it's just the same.
The |tDISKCOPY|t Command
This command will make an exact duplicate of a floppy disk. It copies
every single byte of data on the disk, including bad sector marks and
the formatting codes. For this reason you don't have to FORMAT the tar-
get disk first, but you should anyway because if you don't, then you
won't know whether the disk has any bad sectors, and you could end up
copying good data to a bad sector. If the target disk does have any bad
sectors, you must not use it for a |nDISKCOPY|n purpose. Because although
the |nFORMAT|n command will mark out the bad sectors, the |nDISKCOPY|n command
will ignore that, and copy the data to the target disk in the exact same
way the data was sitting on the source disk.
If the target disk has been used before, it will be completely erased!
Another problem with this command is that it can only be used to copy one
disk to another disk of the exact same size and capacity. A whole lot of
beginners get fooled by that. Since |nDISKCOPY|n makes a sector-by-sector
mirror image of the source disk, the target disk has to have the exact
<page down> for more
DISKCOPY continued
same number of sectors as the source disk. You can't |nDISKCOPY|n from a
double-density to a high-density disk, or from a 3.5" disk to a 5.25"
disk, or anything like that, or to or from a hard disk.
Now, some good points about this command: For one, since it copies every
byte on the source disk, it copies any System and/or Hidden files, which
are otherwise impossible to copy without changing those attributes first.
Second, this command will copy files from the source disk to the target
disk in the same logical drives, with the command |nDISKCOPY|n A: A: or the
|nDISKCOPY|n B: B: command. So you can copy files between disks of the same
size even if you have both sizes of floppy drives, which is not possible
with the COPY or XCOPY commands. DOS will tell you when to switch |ndisks|n,
so you just need to be careful to remember which disk is which. It is a
good idea to write-protect the source disk, so that even if you forget
and put the source disk in when DOS asks for the target disk, the source
disk will not get ruined.
The |TSET|T Command
This command is used to place variable strings into the environment. The
syntax is:
|nSET|n VARIABLE=VALUE
The variable name will be changed to uppercase, but the value will be
placed into the |nenvironment|n in the same form it is entered. The value
and variable name can include any alphanumeric characters.
You can also use the |nSET|n command, with no parameters, to see what strings
are already in the |nenvironment|n.
To remove a variable from the |nenvironment|n, just set it equal to nothing,
like this:
|nSET|n VARIABLE=
If you use the |nSET|n command to set a variable that already exists in the
|nenvironment|n, the new string replaces the old string. There is no way
outside of a batch file, to add another string to the end of a string
that's already there, without retyping the part that's already there.
|tDirectory|t Structure
A |ndirectory|n is like a Table of Contents that tells DOS where to find each
file on the disk. But a directory's size is set at the time a disk is
|sFORMAT|sted, and cannot be enlarged. A |ndirectory|n on a hard drive can only
contain 512 entries. If you try to add another file to a |ndirectory|n that
is already full, you'll get a "|sdisk full|s" message. Well surely a hard
disk can hold more than 512 files?
Yes, it can, by putting subdirectory names in place of some of the file-
names in the |ndirectory|n. Subdirectories can have a number of files or
other subdirectories in them that is limited only by the amount of disk
space. A subdirectory listing is just like any other file; if the file
or the listing gets larger, it simply gets more space allocated to it.
Only the root |ndirectory|n is limited in size.
There are also other reasons for breaking the files up into groups in
subdirectories, rather than leaving them all in the |nroot|n |ndirectory|n. For
one thing, if you actually had 512 files in your |nroot|n |ndirectory|n, wouldn't
<page down> for more
Directory continued
it be awfully hard to see what's there, with all those other filenames
getting in the way? Well it's hard for DOS to find a file that way, too.
DOS has to look through the entire |ndirectory|n listing, just like you do,
to find a file that you tell it to find. So it's best to keep large pro-
grams, that include many files, each in their own subdirectory, so that
both you and DOS can find them more quickly. (See also MKDIR.)
The easiest way to visualize a |ndirectory|n structure, is like a file room.
The |troot|t |ndirectory|n (the main |ndirectory|n which covers the contents of the
entire disk) is like the fileroom. There are a bunch of file cabinets,
and a few separate file folders laying around that have not been placed
into the cabinets. The file cabinets are like subdirectories. Each sub-
|ndirectory|n can contain further subdirectories. These would be like the
drawers in the file cabinets. The drawers contain the files, just like
subdirectories contain files.
The |tcurrent|t |ndirectory|n is like whichever file cabinet or drawer DOS is
currently sitting in. To CHange the |ncurrent|n |nDIRectory|n, you use the
<page down> for more
Directory continued
|tCHDIR|t command, which can be abbreviated as CD. The current |ndirectory|n is
also called the |tdefault|t |ndirectory|n. A |ndefault|n just means whatever will be
used as parameters if the |nparameters|n are not specified.
The terms |ncurrent|n and |ndefault|n can also apply to drives, and have about
the same meanings when they do. The |ncurrent|n drive is the one whose drive
letter is shown in your prompt. But the |ncurrent|n |ndirectory|n is not always
the same as the |ncurrent|n drive. Each drive on your system has a |ncurrent|n
|ndirectory|n at all times, even when that drive is not the |ncurrent|n one. The
|ncurrent|n |ndirectory|n, on a drive that is not |ncurrent|n, is the |ndirectory|n that
would be |ncurrent|n if that drive were made |ncurrent|n. Unless you change the
|ncurrent|n |ndirectory|n on a disk, it is the root |ndirectory|n. Each time you re-
boot your system, the |nroot|n |ndirectory|n of each drive is the |ncurrent|n one.
You can even use the |nCHDIR|n or CD command to change the |ncurrent|n |ndirectory|n
on a drive other than the |ncurrent|n one. For example the CD C:\UTIL com-
mand will change the |ncurrent|n |ndirectory|n on drive C: to \UTIL, whether C:
is the |ncurrent|n drive or not.
<page down> for more
Directory continued
The way to change the current drive is quite simple. To make C: the cur-
rent drive, the command is just C:. To make A: the |ncurrent|n drive, the
command A: would do it. There is no way in DOS to change the |ncurrent|n
drive, and the |ncurrent|n |ndirectory|n on that drive, all in one step. It
takes a C:, A:, etc. type of command as well as a CHDIR or CD command.
Another way to visualize a |ndirectory|n structure is like an upside-down
tree. The root |ndirectory|n is the trunk of the tree, the subdirectories
are the main branches, which can be further divided into smaller bran-
ches, and the leaves are the files.
The |tparent|t of the |ncurrent|n |ndirectory|n is the one that's next closer to the
|nroot|n. If the |ncurrent|n |ndirectory|n is a second-level subdirectory, then the
|nparent|n is the first-level subdirectory immediately above it in the upside
down tree. If the |ncurrent|n |ndirectory|n is a first-level subdirectory, then
the |nparent|n is the |nroot|n |ndirectory|n.
Referencing all these different drives and directories is not all that
<page down> for more
Directory continued
difficult. To tell DOS what disk you're talking about, you use the drive
letter followed by a colon, as in C:. Then you start out with a back-
slash. A leading backslash always refers to the root |ndirectory|n of the
disk in question. Then you tell the subdirectory names, in order, start-
ing from the |nroot|n, that lead to the file. Each subdirectory name is sep-
arated from the others by another backslash. Then you tell DOS the file-
name, a period, and the filename extension. |nDirectory|n names can be from
one to eight characters, and filenames are the same. The filename exten-
sion can be from zero to three characters. So, a full filename specific-
ation might look like this:
C:\WORD\LETTERS\FILENAME.EXT
Of course it's best if you use really short words or abbreviations for
your |ndirectory|n names, because that will save you a whole lot of typing
over the years. Also, the PATH variable in the environment can only be
127 characters long, so if your |ndirectory|n names are long, you'll only be
able to fit a few of them into that variable.
<page down> for more
Directory continued
DOS can tolerate a lot of shortcuts when dealing with file specifica-
tions. Anything that is the default can be left out. Suppose your cur-
rent drive is C: and the current |ndirectory|n on C: is \DOS. If you want
to refer to the file C:\UTIL\FOO.BAR, you can just say \UTIL\FOO.BAR
because if you leave out the drive letter, DOS will assume the |ncurrent|n
drive, and in this case that's the drive you wanted anyway.
If your |ncurrent|n drive is still C: and the |ncurrent|n |ndirectory|n on the A:
drive is \GAMES and you want to reference the file A:\GAMES\PLAY.EXE,
then all you need to tell DOS is A:PLAY.EXE because if you leave out
the |ndirectory|n, DOS will assume the |ncurrent|n |ndirectory|n on the drive men-
tioned, which is the right one. However, if you put a leading backslash
in there, as in A:\PLAY.EXE, that wouldn't work because a leading back-
slash always refers to the root |ndirectory|n, and PLAY.EXE is not in the
|nroot|n, it's in the GAMES subdirectory which branches from the |nroot|n.
Now suppose your |ncurrent|n drive is still C: and drive C:'s |ncurrent|n direc-
tory is still \DOS, and you want to refer to the file C:\DOS\GO.EXE, then
<page down> for more
Directory continued
all you have to say is GO.EXE because C: and \DOS\ are both the |sdefault|ss.
Now let's say the current drive is C: and the |ncurrent|n |ndirectory|n is \ (the
|sroot|s) and we want to tell DOS about that same file named C:\DOS\GO.EXE.
This time we can still leave out the C: and also the leading \ because
those are the defaults, and we can say DOS\GO.EXE.
If the |ncurrent|n |ndirectory|n were \UTIL instead then we would have to include
the \ to remind DOS to start back up in the |nroot|n |ndirectory|n again, then
look for the |ndirectory|n named DOS which is branching from a different spot
in the |nroot|n.
Now how about the ". and .." directories that show up in every |ndirectory|n
listing except the |nroot|n? The .. entry stands for the parent |ndirectory|n.
Well suppose that the |ncurrent|n drive is C: and the |ncurrent|n |ndirectory|n is
\WORD\LETTERS\JOHN and we want to tell DOS to do something with a file in
a |ndirectory|n called C:\WORD\LETTERS\BILL. How do we do that? Well, we
have to first go up one level in the upside-down tree to LETTERS, and
<page down> for more
Directory continued
then down one level to BILL. This will look pretty complicated at first,
but believe me, when you get used to it, it will be easier than typing
out the whole name, C:\WORD\LETTERS\BILL\FILENAME.EXT. Here's the short
way: ..\BILL\FILENAME.EXT. If it weren't for the .. symbol that takes
us up one level, then the shortest way to do it would have been \WORD\
LETTERS\BILL\FILENAME.EXT. So, even though the .. symbol will take a bit
of getting used to, it's worth it!
If you don't have a hard drive, you might think that you will never be
interested in directories. Guess again! Remember that the root direc-
tory of any disk is limited as to how many entries it can hold. For 360K
and 720K disks, that limit is 112 files, and for 1.2M and 1.44M |ndisks|n, it
is 224. If you want to have more files than that on a disk, you have to
create a subdirectory on the disk to put the files into. Because al-
though the |nroot|n |ndirectory|n is of a limited size, a subdirectory can con-
tain an unlimited number of files.
If you have more than 150 files in any |ndirectory|n, you should divide that
<page down> for more
Directory continued
|ndirectory|n into subdirectories, so that DOS can find your files faster.
Now remember that even though it's easier for you to think of directories
in terms of file rooms, and upside-down trees, and stuff, in reality all
they are is files. They're just files which contain information about
other files. For example here's the |ndirectory|n entry for my |nAUTOEXEC.BAT|n:
0192(0000) 41 55 54 4F 45 58 45 43 42 41 54 00 00 00 00 00
0208(00D0) 00 00 00 00 00 00 89 BE DC 16 6C 01 5D 03 00 00
Well the eleven bytes starting with 41, 55, 54, if you convert those hex
numbers to decimal and then look them up in the ASCII chart, you'll find
that they spell AUTOEXECBAT. (If the filename were less than eight let-
ters long, there would be one or more 20s between the name and extension
of the file.) The next number is the attribute byte, and since it says
00, you know that this file doesn't have any of its attributes turned on.
The four |nbytes|n 89, BE, DC, 16, are the date and time of the most recent
update to the file. Also in that |ndirectory|n entry somewhere are the size
of the file (number of |nbytes|n in length) and the number of the first clus-
ter of the file (where it's located on the disk). Well, a |ndirectory|n is
just a file that holds an entry like that for each file in the |ndirectory|n.
The |tBACKUP|t Command
How important is it to |nbackup|n your hard disk? Well, how hard is it for
you to get your files all organized the way you want them? How hard is
it for you to create your data files in your word processor, spreadsheet,
database, or whatever other type of programs you use? Do you want to
take the very real chance that it could all be lost, and you'll be right
back to square one, when there's something you can do to prevent it? Of
course backing up is a pain! Most worthwhile things are. But once you
have done it a couple times, it won't be confusing anymore. You'll get
the hang of it in no time flat. Make it a habit, and just like all hab-
its, it will become second nature.
You have to be really careful to stick a label onto each disk as you're
doing the |nbackup|n, because the RESTORE command, which is the only way to
read |nbackup|n disks, has to have the |ndisks|n in the right order to be able to
put your files back together later after your hard drive has crashed. Be
really sure that you know the correct order of the |nbackup|n |ndisks|n. Include
the date and time on the labels too!
<page down> for more
BACKUP continued
Not too many people use the DOS |nBACKUP|n command, but it's fine for a while
'til you get something better. The syntax is |nCOMMAND|n SOURCE TARGET SWIT-
CHES just like most any other DOS command. So let's take those parts one
at a time. The command is |nBACKUP|n, or C:\DOS\BACKUP, or A:\BACKUP, depen-
ding on where the executable file is located.
The source is what files you want to |nbackup|n. If you want to |nbackup|n the
whole disk, you must perform this command from the root directory of the
disk, and the source would then be C:\*.*, which means everything in the
|nroot|n |ndirectory|n. Later we'll get to the part of the command that tells
DOS to also include the subdirectories of the |nroot|n |ndirectory|n.
Now the target is where you want the |nbackup|n files to end up. That's just
a drive letter, like A:.
Now for the harder part. Don't worry, it's not that hard. The |nBACKUP|n
command has quite a few switches from which to choose. Here they are:
/S /M /A /D:05-16-91 /T:10.02 /F /L:C:FILENAME.EXT
<page down> for more
BACKUP continued
So, what on earth do all those things do? Well the /S switch is for
subdirectories. That's what tells DOS to |nbackup|n not only the current or
specified directory, but also all of the subdirectories anywhere under
that |ndirectory|n.
The /M switch checks the Archive attributes for all the files, and only
backs up files that have been created or modified since the last |nbackup|n
was done. You don't want to use this switch the first time you |nbackup|n,
but only for incremental backups. (Incremental means just the files that
have changed since the last time.)
The /A switch tells DOS not to erase the files that are already on the
target disk, the way it usually happens, but to leave them there, and
just add the files now being backed up, to the space that is left on the
disk from the previous |nbackup|n. So obviously this switch is only for in-
cremental backups also. If your last incremental |nbackup|n took 5.2 disks,
then you still have 80% of that last disk empty. Well the /A switch will
allow you to fill up the empty space on that disk for this incremental
<page down> for more
BACKUP continued
|nbackup|n, instead of making you start fresh on a new disk.
The /D:05-16-91 switch tells DOS to only |nbackup|n files that were last mod-
ified on or after that date. You don't want to use that switch with the
/M switch because they'd both be trying to do the same thing in different
ways. In fact, I'd never trust this switch, in case the system clock had
been wrong at some point. Because then you'd end up backing up the wrong
files all together! The /T:10.02 switch which didn't appear in DOS until
version 3.3, allows you to be even more specific, about the time. It can
tell DOS to only |nbackup|n files modified at or after that time of day. Do
not forget to convert times to military format though, because if you en-
ter 3.00 then you're going to get 3 am. If you want to say 3 pm then use
15.00. Don't even think about using the /T switch without using /D also.
The /F switch tells DOS to FORMAT the disks before backing up files to
them. If the |nFORMAT|n command file is located in a directory listed in the
PATH variable in the environment, then the |nBACKUP|n command can |nFORMAT|n the
|ndisks|n while it's backing up.
<page down> for more
BACKUP continued
This switch didn't exist until DOS version 3.3, so before that, we had to
FORMAT a whole stack of disks before we even started backing up. Then
what would happen, is that we hadn't formatted enough |ndisks|n, and we would
run out, and do you know what that used to mean to the |nBACKUP|n process?
That would mean we would have to start over completely from the beginning
after we went and formatted some more |ndisks|n. Because there isn't any way
to tell the |nBACKUP|n command to pick up where we left off before we ran out
of formatted |ndisks|n. Oh yes, the /F switch was welcomed by all DOS users!
Ok, last one, the /L switch. This one also didn't exist until version
3.3 of DOS. What it does is it creates a log file of what the |nBACKUP|n
command did. That way, after you've backed up your whole disk and you
have a stack of 38 floppy |ndisks|n, you can tell which files are on which
floppies. Because the |nBACKUP|n command concatenates all the files into one
big file, which fills up the whole disk, so you can't tell from the dir-
ectory listing which files are where! If you leave out the path and
filename info in the /L switch, |nBACKUP|n will automatically use the default
name of |nBACKUP|n.LOG and put it in the root directory of the source disk.
<page down> for more
BACKUP continued
In my opinion, the worst thing about the DOS |nBACKUP|n command is that there
are only two ways to do it. You can do a full |nbackup|n which backs up the
whole drive, and each time after that you can do an incremental |nbackup|n of
just the files that have changed since the last time you backed up.
Know what that means? That means that when it comes time to RESTORE the
files to the hard drive, you need to have that original full |nbackup|n's set
of floppy disks, and you also need the |ndisks|n from each and every increm-
ental |nbackup|n you've done since then. If you're backing up twice every
week like you should be, then after a year you've got over a hundred sets
of |nbackup|n floppies.
True, each set after the first one, might have been only one or two |ndisks|n
but still, that's a tremendous amount of |ndisks|n to mess with! You have to
keep them all safe and secure until such time as you do another complete
|nbackup|n. After that time, but not until then, you can re-use all of the
|ndisks|n from the full |nbackup|n and the incremental backups. What a pain!
<page down> for more
BACKUP continued
Some commercial |nbackup|n programs have another choice in |nbackup|n strategies,
though, and PC Tools, for example, calls it Differential |nbackup|n. Here is
what it does:
The first full |nbackup|n you do backs up every file you have, right? And
it also turns off the Archive attributes for all the files it backed up.
Now you've probably only got a few dozen files that are ever going to
change, if you don't go out and buy any more software. All these files
that are ever going to change will probably fit on one or two disks.
Well the Differential |nbackup|n method backs up all the files that have the
Archive attribute set, but it doesn't turn it back off! That way, the
next time you do a Differential |nbackup|n, it backs up everything that has
changed since the original full |nbackup|n! That means you don't have to
keep every single set of Differential |nbackup|n |ndisks|n you've made!
So, on week one you do a full |nbackup|n. On week two you do a Differential
|nbackup|n. On week three you do another Differential |nbackup|n. Now on week
<page down> for more
BACKUP continued
four you can re-use the disks that you used for week two's |nbackup|n, and
on week five you can re-use the week three |nbackup|n |ndisks|n! You only need
to keep your original full |nbackup|n |ndisks|n, and the two most recent sets of
Differentials! (The reason you want to keep last week's set as well as
this week's set is not because there are any files on last week's that
aren't on this week's, but only because in case you've made a big goof
in data entry this week, you can RESTORE last week's copy of the file,
from before you made the big goof.)
So that's just one of the reasons you want to get some other |nbackup|n pro-
gram besides the DOS |nBACKUP|n command, so you can do Differential backups
instead of just incremental ones.
One thing you really want to do whenever you're about to use the |nBACKUP|n
or |nRESTORE|n commands, is to reboot the computer without loading any |sTSR|ss
into memory, because they can seriously interfere with the operation of
these two commands. That goes for the DOS commands, or any other |nbackup|n
program. And in most cases, you can only restore a |nbackup|n using the RE-
STORE command from the same version of DOS that made the |nbackup|n.
|tMemory|t and Related Concepts
First of all, when many beginners get their first "Out of |nmemory|n" error
message, they think that deleting files from their hard drive will help.
But |nmemory|n has nothing to do with hard drive space. |nMemory|n means the
|tRAM|t (Random-Access |nMemory|n) chips inside the computer case, where the
computer stores data while it's being processed. Disk space is where
data is stored while it's not being used. It's like your file cabinet,
where you keep your files, out of your way, while you're not working on
them. The |nmemory|n is like the surface of your desk, where the computer
keeps the files it's working on at the moment. The size of your file
cabinet has nothing to do with the size of your desktop.
There are several different kinds of |nRAM|n. The only kind DOS knows how to
use for running programs, is |tconventional|t |nmemory|n. The most |nconventional|n
|nmemory|n a computer can have, is 640K. (There is an exception to this just
like there are exceptions to many rules when it comes to the subject of
|nmemory|n. We'll get to that exception later.) DOS just doesn't know how
to access any more than that. So even if you have 6 Megs of |nRAM|n in your
<page down> for more
Memory continued
computer, DOS can still only use 640K of it.
By the way, you can think of |tbytes|t as being about the same as characters
of data. A text file that contains 3564 |nbytes|n of data has pretty close
to 3564 characters in it. (You have to also count 2 extra |nbytes|n per line
for the carriage return and linefeed characters, and there's also an End-
of-File character, and maybe a few other things too. But it comes out
pretty close to the same.) K means kilobyte, which is 1024 |nbytes|n. M or
Meg means megabyte which is 1024K or 1,048,576 |nbytes|n. (See also Binary.)
Part of the 640K is used up by DOS itself. DOS is in |nmemory|n at all times
or else your computer just wouldn't know how to do anything. But that's
ok, because when it says on a package of software that it requires 640K
of RAM, it doesn't mean it needs the 640K all to itself. It means that
it just needs for your computer to have that much installed. The soft-
ware makers know that you have to have DOS loaded into |nmemory|n.
Actually DOS does know how to access 1M of |nmemory|n, not just 640K. But
<page down> for more
Memory continued
the |nmemory|n addresses from 640K to 1M are reserved for use by such things
as the |nmemory|n on your video card, the |nmemory|n on your disk controller, the
BIOS, |nROM|n, and other assorted things. These things are taking up some
space in the 640-1024K area of |nmemory|n, but most of that space is empty.
This space is called the |tupper|t |nmemory|n blocks. On most machines, there is
no motherboard RAM in this area unless you have |nshadow|n |nRAM|n enabled. So
since this area of |nmemory|n addresses is reserved for that other stuff, the
motherboard |nmemory|n skips these addresses, and continues on above the one
meg |nmemory|n address. Many people just don't understand this, even those
who claim to be experts. But this is why a computer that only has 1M of
|nRAM|n does have extended |nmemory|n above the 1M address--because the 384K of
|nmemory|n above the first 640K does not use the 640-1024K area since that
area is reserved (unless the 384K is configured as |nshadow|n |nRAM|n, that is).
What on earth is |tshadow|t |nRAM|n, you say? Well you see, normally the video
|nBIOS|n is in a very slow type of |nmemory|n called Read-Only |nMemory|n, which is
also called |tROM|t. On many computers, you can enable |nshadow|n |nRAM|n which
means that when you start the computer up, it will copy the video |nROM|n in-
<page down> for more
Memory continued
to some RAM that it has re-mapped to addresses between 640K and 1M, and
your screen writes will be faster, because |nRAM|n is faster than ROM.
So when shadow |nRAM|n is enabled, some of the |nRAM|n above the 1M line will be
re-mapped to the addresses between 640K and 1M so that DOS will be able
to access it. Because DOS just can't access anything above 1M. But if
|nshadow|n |nRAM|n is disabled, then all the motherboard |nRAM|n is either at 0-640K
or else at 1M or above. The 640-1024K |nmemory|n area is "just there", on
all computers, even if you only have 512K of motherboard |nRAM|n.
If you have 1M of |nRAM|n on your motherboard, then most likely, that is, if
|nshadow|n |nRAM|n is disabled or your computer doesn't do |nshadow|n |nRAM|n, then its
addresses are 0-640K and 1024-1408K. That's right, even though you only
have one meg, you have 384K of |nmemory|n above the one meg address mark. So
when you read in the manual that a RAMdisk can use extended |nmemory|n above
one meg that doesn't mean you can't use the |nRAMdisk|n because you only have
one meg, because your 384K probably is above one meg.
<page down> for more
Memory continued
Well actually, there are some programs that can make a little bit of the
upper |nmemory|n blocks available for programs, but at the expense of graph-
ics. These programs (Quarterdeck's VIDRAM is one) can take some of the
RAM that's on your video board and remap it so that DOS can use it. That
can give you over 700K of conventional |nmemory|n to run programs in, if you
have a VGA board! Trouble is, when you have things set up that way, you
can't use any graphics because your video board's |nmemory|n is being used
for programs. You can only use text-based programs in this case. But
this program can be temporarily disabled to give you back the graphics.
There is also another way to use the |nupper|n |nmemory|n blocks. On any 386 or
newer machine, and on a 286 that has a LIM 4 hardware-compatible expanded
|nmemory|n, and on a |n286|n that has shadow |nRAM|n capability, all of which are ab-
le to remap |nmemory|n, there are programs (like Quarterdeck's QRAM) that can
move some of your |sTSR|ss into |nmemory|n that has been remapped into addresses
in this area. This way you can free up as much of your |nconventional|n mem-
ory as possible and still be able to run your favorite TSRs!
<page down> for more
Memory continued
Uh-oh, here comes yet another contradiction. I said that there's no way
for DOS to access any |nmemory|n above the one meg address for program use.
That's mostly true, but not totally. DOS has a program called |tHIMEM.SYS|t
which, when installed on a |n286|n or newer computer, can allow DOS to reach
the first 64K block of |nextended|n |nmemory|n. This block of |nmemory|n is called
|thigh|t |nmemory|n. It still can't be used as conventional |nmemory|n, but some
programs can make good use of it. Some programs, including DOS version
5.0, can put part of their own code into |nhigh|n |nmemory|n to release the space
they would otherwise have been using up in the |nconventional|n |nmemory|n area.
Now here comes a really troublesome contradiction! Some people refer to
|nhigh|n |nmemory|n as upper |nmemory|n blocks, and refer to the |nupper|n |nmemory|n blocks
as |nhigh|n |nmemory|n. So if someone is talking about |nhigh|n |nmemory|n or |nupper|n mem-
ory blocks, you won't ever know whether they're talking about what I've
called |nhigh|n |nmemory|n, or what I've called |nupper|n |nmemory|n blocks, unless you
ask them what they mean. Isn't that going to be fun?
|tExtended|t |nmemory|n is RAM that's above the one meg mark. DOS can't use it
<page down> for more
Memory continued
for anything. Because extended |nmemory|n can only be accessed through pro-
tected mode, and DOS can't go into protected mode, ever. But there are a
few programs that can use |nextended|n |nmemory|n. A RAMdisk, a print spooler,
or a disk cache can access |nextended|n |nmemory|n without any assistance from
any |nmemory|n management program. There are also programs which have been
written especially to be able to use |nextended|n |nmemory|n, but they are few
and far between, except for a type of thing called a |nmultitasker|n.
A |tmultitasker|t is a very complicated sort of a program which does a very
exciting thing on a 386 or newer computer. It can take advantage of a
mode called Virtual 8086 mode. In V86 mode, a |nmultitasker|n can set aside
640K of |nextended|n |nmemory|n and run one copy of DOS there, and set aside an-
other 640K chunk and run another copy of DOS there and set aside another
640K chunk and run yet another copy of DOS, and all of these copies of
DOS each think that they're running in the bottom 640K of conventional
|nmemory|n!
Each copy of DOS is actually running in |treal mode|t, but the |nmultitasker|n
<page down> for more
Memory continued
keeps each Virtual Machine protected from what the others might be doing,
so that one Virtual Machine doesn't try to access some part of |nmemory|n
that another program in another Virtual Machine is using. That's basic-
ally what |tprotected mode|t means.
The reason Virtual 8086 mode is named that, is because 8086 is the name
of the CPU in the first personal computer, and in V86 mode the 386 is
pretending to be a bunch of small processors instead of one big one.
Well the multitasker is also in charge of dividing up the CPU's time.
In multitasking, there really isn't more than one program running at the
same time. A |nCPU|n can't possibly do more than one thing at a time. But
since the |nCPU|n can do things so much faster than the rest of the hardware
can, the |nmultitasker|n can give one slice of the |nCPU|n's time to one program
while another program is waiting for data to be retrieved from the hard
drive and a third program is waiting for you to finish typing a command,
then the |nmultitasker|n gives the next timeslice to another program while
the first one is waiting for the printer to finish what it's printing and
<page down> for more
Memory continued
you're still typing at the keyboard on the third program, and on and on.
The CPU is never doing more than one thing at a time, but since it swit-
ches so rapidly among its chores, it just looks like it is.
Some examples of really good |smultitasker|ss are VM/386, DESQview/386, and
Windows/386, although personally I would never recommend Windows to any-
one. Just my own opinion. I use VM/386 and I am very happy with it, al-
though I must warn you that program is quite picky about what hardware it
is used on. But if it will work on your system, it does a great job.
Most anything that uses extended |nmemory|n needs an |neXtended|n |nMemory|n Specif-
ication (|tXMS|t) driver to run. But on the other hand, most things that use
|nextended|n |nmemory|n have their own driver built right in. So you don't hear
too much about |nextended|n |nmemory|n managers. HIMEM.SYS is one.
|tExpanded|t |nmemory|n, however, is another matter! Everybody's always talking
about how to manage |nexpanded|n |nmemory|n. So what is it? Well, on a 8088 or
286 machine, it's a board full of |nmemory|n chips with special hardware that
<page down> for more
Memory continued
can dynamically remap the |nmemory|n addresses. (This remapping capabili-
ty is built into the 386 and higher CPU, so it can use expanded |nmemory|n
without the special |nexpanded|n |nmemory|n board.) What do I mean by remap?
Well, if you're looking out a window, you can see one small part of the
world outside, right? But if you move to the other side of the room and
look out the same window, you can see a slightly different part of the
outside world. (The "window" is generally called a "page frame".) Ex-
panded |nmemory|n is sort of like that. It puts the window into the upper
|nmemory|n where DOS can access it, and then it does some "bank switching".
You see, the |nexpanded|n |nmemory|n manager can see all of the |nexpanded|n |nmemory|n,
even though DOS can't see any of it because it's not in a location that
the |nCPU|n can address. So the |nexpanded|n |nmemory|n manager finds out what data
DOS wants next, and it switches the bank of |nmemory|n that contains that
data, into the window where DOS can get it. It just keeps doing that,
whenever DOS wants some data it changes the angle through which DOS is
looking out the window, so that DOS sees the data it's looking for.
Examples of |nexpanded|n |nmemory|n managers are EMM386, which comes with recent
<page down> for more
Memory continued
versions of DOS, and QEMM which comes from Quarterdeck. Each of these,
as well as most any expanded |nmemory|n manager that's still alive these days
supports what's called the |tEMS|t (|nExpanded|n |nMemory|n Specification) 4.0, also
known as |tLIM|t (Lotus-Intel-Microsoft) 4.0.
There are a lot more programs which have been designed to use |nexpanded|n
|nmemory|n than those that can use extended |nmemory|n. Not only is |nexpanded|n
|nmemory|n probably easier to write a program for, but also because it's not
possible for an 8088 processor to use any |nextended|n |nmemory|n. There are
still a lot of 8088s in use, and software publishers like to be compat-
ible with as many computers as possible. So software companies don't
like to use |nextended|n |nmemory|n, even though it is more efficient. |nExpanded|n
|nmemory|n can be used on any computer, whereas |nextended|n can only be used on
a 286 or higher CPU.
Now how do you remember the difference between the words |nexpanded|n and
|nextended|n? Well you know that the word |nexpanded|n means that something has
gone from being narrow, to being wide. Well |nexpanded|n |nmemory|n is like
<page down> for more
Memory continued
that, because DOS just sees this little window of |nmemory|n, and there is
really a wide chunk of |nmemory|n being viewed through that window. The word
extended means that something has gone from being short, to being long.
Well |nextended|n |nmemory|n is like that, because without it, there is just a
short list, from 0 to 1024K, of |nmemory|n locations that can be accessed.
But with it, there is a long list, from 0K all the way up to 16 megs or
more, in a row, that can be accessed. (Not by DOS, of course, but just
by the computer.)
Now DOS version 5 includes some great |nmemory|n management programs. First
of all, it knows how to use the High |nMemory|n Area (HMA) to load its own
kernel into, as long as you have HIMEM.SYS installed as the first line of
CONFIG.SYS, and use the DOS=HIGH command to tell DOS to go |nhigh|n. That
DOS kernel that goes |nhigh|n takes up about 45K of |nmemory|n so when it's |nhigh|n,
that frees up 45K of conventional |nmemory|n, that DOS would otherwise have
been using. Also, when DOS goes |nhigh|n the BUFFERS go |nhigh|n too, if you
don't specify too many of them, so that frees up even more |nconventional|n
|nmemory|n. This will work on any computer that has any |nextended|n |nmemory|n.
<page down> for more
Memory continued
Now on a 386 or higher computer, which has built-in |nmemory|n mapping capa-
bilities, DOS version 5 can do an even better job. First, the HIMEM.SYS
device driver converts the extended |nmemory|n to XMS |nmemory|n (that just means
|nextended|n |nmemory|n that's being managed by an |neXtended|n |nMemory|n Specification
version 2.0 driver, which |nHIMEM.SYS|n is). Now the EMM386 |ndevice driver|n
can take that |nXMS|n |nmemory|n, on a |n386|n, and make it pretend to be expanded
|nmemory|n (which is called |nexpanded|n |nmemory|n emulation). So now that this
|nmemory|n is doing the job of |nexpanded|n |nmemory|n, it can be remapped into some
empty addresses between 640K and 1024K, where DOS can access it, and then
|sTSR|ss and device drivers can be loaded into it, so that they aren't taking
up any conventional |nmemory|n anymore.
In order to make all this happen, if you have a |n386|n with |nextended|n |nmemory|n,
you just use the |nHIMEM.SYS|n, |nEMM386|n, and DO|1S commands in CONFIG.SYS to
make the Upper |nMemory|n Blocks available, and then use DEVICEHIGH commands
instead of DEVIC|1E commands, and use the LOADHIGH command for TSRs. To
make this work on a 286, you need the special shadow RAM capability, or
a LIM 4 hardware-compatible |nexpanded|n |nmemory|n board, along with a program
such as Quarterdeck's QRAM.
What Is the |tCPU|t?
The |nCPU|n is the computer's brain. It stands for Central Processing Unit.
It is just a little square chip about an inch and a half on each side, if
you can believe that, and that's where all the computing takes place.
The |nCPU|n for the first set of personal computers was the 8086, which was
put into an IBM computer model which was named the PC. Next came the
|t8088|t processor, and that one went into a model called the |tXT|t. That one
cannot in any way access memory above the one meg address, but it can use
expanded |nmemory|n. After that came the 80286 |nCPU|n, which is usually abbrev-
iated as |t286|t. This was the first computer that could take advantage of
extended RAM. It went into a model of computer called the |TAT|T. After
that, the |t386|t and 486, now even 586, came along. Who knows, by the time
you read this, there could be an 80686 processor being developed!
What Is a |tCache|t?
There are two different kinds of |ncache|n. The most common one is a hard
drive |ncache|n, and that is a piece of software which, when you install it
into memory, sets aside a large chunk of extended or expanded |nmemory|n to
do the caching. Now what it does, is every time you read something off
the hard drive, it keeps it in this chunk of |nmemory|n, and then when you
need that piece of info again, you get it from the |ncache|n which, since it
is in RAM, is a lot faster than going back to the hard drive to get that
piece of data again. The |ncache|n that comes with recent versions of DOS
is called SMARTDRV.SYS.
Most caches also do what's called look-ahead, which means that every time
you get some data from the hard drive, it also gets the next one or two
sectors of data, and puts that in the |ncache|n also. So if you're running a
type of program that does a lot of sequential disk access, then the next
time the program needs more data, it's probably already in the |ncache|n be-
cause the next data it needs is what came right after the last data it
needed, which the |ncache|n already looked ahead to get.
<page down> for more
Cache continued
Another thing that most caches do, is pay attention to the frequency with
which each piece of data is requested by the application. I mean when
you've been running the computer for a while since the last time you re-
|sboot|sed, then a whole lot of data has been read from the disk, and the
|ncache|n gets filled up. Well instead of the |ncache|n just dumping the oldest
data to make room for the next data that gets requested from the hard
drive, the |ncache|n instead dumps the piece of data that has so far been
asked for the smallest number of times. Now if your |ncache|n is all filled
up with stuff that keeps getting requested over and over again, then the
|ncache|n is not going to dump it for new info that's only been requested
once. If that same piece of new info gets requested several times, so
the |ncache|n figures it must be a pretty important piece of info, then and
only then will the |ncache|n dump some older piece of often-requested info to
let the new often-requested info in. So that's one reason why BUFFERS
are still sort of important, even if you have a |ncache|n. Because buffers
only keep the most recently accessed data, regardless of the frequency
with which it is requested. So it's possible to have data in the buffers
that isn't in the |ncache|n, so you can save an extra trip to the hard drive
<page down> for more
Cache continued
by having some BUFFERS. Another reason you need to have a few buffers
even if you have a |ncache|n, is that most caches don't pay any attention to
floppy drives. They only work on hard drives. Well the buffers will do
a little bit of caching with the |nfloppy|n drive info. And one more reason
for buffers even with a |ncache|n, is that sometimes you need to disable the
|ncache|n, like when you're about to optimize your hard drive (that means fix
the fragmented files). If the |ncache|n is disabled for a while, you'll be
glad that you have a few buffers loaded. But I do mean just a few, be-
cause with a |ncache|n, which does basically pretty much the same thing as
the buffers, the memory that having a lot of buffers takes up, is not
worth it. Unless you've never had a shortage of conventional |nmemory|n in
the first place, or if you have DOS version 5, where buffers go into the
high |nmemory|n area and don't take up any |nconventional|n RAM anyway.
Now one thing you need to remember. You'd think that if a large |ncache|n
is good, then a huge |ncache|n would be even better, right? Wrong. A |ncache|n
that's too large slows things down instead of speeding them up, because
looking through all that data that's stored in the |ncache|n can take longer
<page down> for more
Cache continued
than it would have taken to just get the data from the hard drive! So
pay attention to the manual for your |ncache|n program, and if it says a cer-
tain size is recommended, then use that size until you know more about
the subject and have some spare time to go testing things with a bench-
mark program.
There is one thing to watch out for with a disk |ncache|n, though. Remember
that the information in the |ncache|n is just a copy of what's on the disk.
Just because the CHKDSK command tells you that your hard drive is trashed
does not necessarily mean that it's true! Suppose you're playing around
with trying to load a new TSR into upper memory. Something goes wrong
and the |ncache|n in the extended |nmemory|n gets trashed, and then for some rea-
son you use the |nCHKDSK|n command and it says your hard drive has no files
on it, only a million lost chains in a zillion lost clusters. Well don't
panic! It's quite likely that when |nCHKDSK|n went to check your directory
structure for you, it found the information that it thought it was look-
ing for, in the |ncache|n so it didn't even look at the hard drive. The copy
of the |ndirectory|n structure that was sitting in the |ncache|n has been corrup-
<page down> for more
Cache continued
ted so CHKDSK just thinks your disk is trashed, but there's really not
a thing wrong with your hard drive at all.
So remember, if |nCHKDSK|n ever tells you that your whole disk is trashed
while you have a disk |ncache|n active, flush or disable the |ncache|n and then
try again to read your hard drive. I'll bet you'll find that it's just
fine. Just get rid of whatever it was that you were trying to load into
your extended or upper memory that trashed your |ncache|n information.
The other type of |ncache|n is a RAM |ncache|n, which is just a small chunk of
super-fast |nmemory|n. It performs the same function for the |nmemory|n as what
a hard drive |ncache|n does for the hard drive.
By the way, it's pronounced "CASH", not "cash-AY".
What Is |tCMOS|t?
If you have a 286 or newer computer, you probably have |nCMOS|n. What is it?
Complementary Metallic Oxide Semiconductor. Now don't be asking me what
that is supposed to mean, I just thought you'd like to know what the in-
itials stand for.
What does it do? Well it's a little piece of memory that is backed up by
a battery, that keeps track of the date and time, as well as what sort of
hardware you have installed in your system. The amount of RAM, the num-
ber and types of floppy drives, the number of hard drives and detailed
information about each, the type of graphics adapter, the number of ser-
ial and parallel ports, all this information is stored in |nCMOS|n. If your
|nCMOS|n gets wiped out, your computer won't even know that you have a hard
drive, so you'll have to boot from a |nfloppy|n.
So may I suggest that you quickly get into your |nCMOS|n setup and write down
every detail of what it says, because some day your battery is going to
run down and the |nCMOS|n information will all be lost, so you'd better know
<page down> for more
CMOS continued
what information is supposed to be there so you can put it back!
The way to get into the |nCMOS|n is a little different for each type of BIOS,
but for mine, a little message comes up on the screen every time I turn
on the power, which says something like, "Press |nDEL|n to enter |nCMOS|n setup".
If I press the <Delete> key while that message is on the screen, then af-
ter a couple seconds I get the |nCMOS|n setup screen. I'm sure that if your
screen doesn't give you any such message, then the manual that came with
your computer will tell you what to do to get to your |nCMOS|n setup.
Just write down whatever it says there, be sure not to change anything,
and then exit. Keep that information that you wrote down in a very safe
place, and whenever your battery dies, just get a new one, and you'll be
able to put the correct information back into the |nCMOS|n.
Shareware and Other Methods of Software Distribution
The normal method for distribution of software is plain old |tcommercial|t
software that you buy in a store or from a catalog, and it generally
costs five or fifty times what it's worth.
Sometimes you can get a |tdemo|t version of a |ncommercial|n program, which you
can try out for free, but some of its best features will be disabled, so
that it won't do you much good except for seeing whether you like the
program or not. That way, if you like it, you'll buy a real copy.
|tShareware|t is a method of distribution where you can also try the program
out for free, and only buy it if you like it, but in most cases it is not
crippled the way |ncommercial|n demos are. There are some exceptions to that
and we generally refer to such programs as "crippleware", but for the
most part, |nshareware|n is fully functional.
The quality of a piece of |nshareware|n depends on the attitude of the au-
thor. Some authors realize that the only way they're going to get paid
<page down> for more
Shareware continued
for the program, is if it's really good, and so they put a lot of work
into releasing an excellent product. Commercial software authors don't
always do that, because they get their money before you get the software
home and find out you don't like it! Unlike most any other type of prod-
uct in the world there is rarely a money-back guarantee for any software.
This is because, once the package is opened, it is possible that whoever
opened it has made a copy of the disks to keep, or perhaps infected them
with a virus, so most stores won't accept any opened software for return.
So the author knows that once you buy the product, he gets his money re-
gardless of whether you like the program or not! Why should he waste a
bunch of time making a good program?
|nShareware|n authors know better, because the only way they can possibly get
any money at all is if you like the program well enough to send some mon-
ey. So they put a lot of time into getting it right. Also, |ncommercial|n
software programmers have time limits placed on them by the marketing de-
partment of their company. |nShareware|n authors don't have to release their
products until they're ready for market. Just a couple explanations for
<page down> for more
Shareware continued
the fact that there are so many |nshareware|n products available that are
even better than equivalent commercial programs!
Some |nshareware|n authors, though, realize that very few people ever bother
to register their |nshareware|n, so they don't try that hard, because they
figure they're not going to make any money on it anyway. Those authors
give |nshareware|n a bad name, but then again, that's only because so many
|nshareware|n users don't pay for their |nshareware|n! So in a way, if you don't
register the |nshareware|n you like, and you get some other |nshareware|n that
isn't any good, that's just as much your fault as the fault of the author
who didn't try hard because he knew you wouldn't register it anyway.
If you like the concept of downloading software from a BBS, trying it out
for a day or a week or a month, to make sure you like it, and then send-
ing a reasonable amount of money to the program's author, then please do
support the |nshareware|n industry by sending in a registration fee for what-
ever programs you like. Because if |nshareware|n authors don't make any mon-
ey, they're going to stop releasing their work in the |nshareware|n form, and
<page down> for more
Shareware continued
it will no longer be possible for you, or for anyone to benefit from such
an equitable arrangement as what |nshareware|n is.
Besides, if you use a piece of |nshareware|n for more than a month or so,
without paying for it, you're basically breaking the law! You're never
going to get caught or go to jail for it, but that still doesn't make it
right.
Another reason to register your |nshareware|n, is that if you do, you might
get free upgrades, free technical support, a nice neat typeset manual, or
some special features like a new copy of the program that allows you to
change its screen colors.
There are also other software authors who are just so generous, and have
written some program that they think is so necessary that everyone should
be able to have it, that they release the program as |tfreeware|t. This type
of software is just like it sounds, free! Totally and completely!
<page down> for more
Shareware continued
Another type of free software is |tpublic domain|t. This is just like free-
ware, only the author doesn't even care if anyone knows he wrote it.
This stuff is not even copyrighted! A body could even use it as part of
a program that they're writing, without worrying that they'll get sued or
anything.
So, what types of |nshareware|n, |nfreeware|n, and |npublic domain|n software are
available? Just about every type that is available through |nconventional|n
commercial outlets, and more! Because |ncommercial|n distributors are only
interested in software that would appeal to large numbers of people. So
there are fewer types. But if some programmer somewhere writes a little
program for his own use, and then decides he may as well try to get a
little money out of it, he releases it as |nshareware|n. Even if it is some-
thing that so few people would be interested in, that no software house
would take it, it is still available as |nshareware|n. I don't think there's
any function possible on a computer, that some |nshareware|n author somewhere
hasn't written a program to accomplish!
<page down> for more
Shareware continued
Ok, so how do you get this stuff? Well there are a lot of mail order
companies that advertise in the computer magazines, that distribute
|nshareware|n. However, they charge anything from $1 to $5 per disk, for
the copying and shipping fees. So that is in addition to the registra-
tion fee that is due the author if you like the program. The other main
way to get this sort of software, is by |ndownloading|n it over your modem,
from national online services or from local BBSs.
So, what is |tdownloading|t? Well that's when you use your modem to dial up
a local |nBBS|n, or one of the national online services, and you have your
software tell their software to send you a file. Then the file is sent
from their hard drive straight to your hard drive, over the phone line.
All, right, now what is a |tBBS|t? Well that stands for Bulletin Board |nSys|n-
tem. What it means is that someone has a very expensive hobby! The
Sysop (System Operator) of a |nBBS|n has a spare computer with a large hard
drive, and a separate phone line, and some special |nBBS|n software, and you
can just use your modem to call up his computer, and play some games, or
<page down> for more
Shareware continued
write messages to other users, or download software!
One thing that most people have to find out the hard way, that is, by
having someone publicly ask them on the BBS to stop it, which is kind
of embarrassing: It is considered rude to type in ALL CAPS on a |nBBS|n
because it's kind of hard to read, and it's interpreted as shouting.
Please turn off your <CapsLock> key when writing messages on any |nBBS|n.
Now usually a program that you download is all packed together into one
file with an extension like .ZIP, .ARC, .LZH, .ARJ, .ZOO, or .PAK. These
are called archive files or compressed files. They've been compressed so
that the compressed file is smaller than the sum of the files before com-
pression, so that it won't take so long to download it, and so that it
won't take up so much space on the hard drive of the |nBBS|n, and also so
that you can get the whole program by downloading just one file, rather
than |ndownloading|n each file of the program separately.
So what do you do with a .ZIPped or .ARCed file when you get it? Well
<page down> for more
Shareware continued
you need the compression program it was compressed with, to decompress
it. There's a different compression program that works on each of those
archive extensions. One of the most popular is PKZIP which makes the
files with .ZIP extensions. All these compression programs are share-
ware and they are available on the same BBS you downloaded the file from.
You just need to download the file that contains the compression program.
Now this file will have an .EXE extension, and it is called a Self-Ex-
tracting compressed file. What that means, is that if you just type its
name, like any other .EXE file, it will uncompress itself. That way you
don't have to have the PKUNZIP.EXE file already, in order to unzip the
PKZIP program. That wouldn't work at all, would it?
So when you execute the self-extracting file, it will unzip itself into
all of the files that make up the program. Like PKZIP.EXE, PKUNZIP.EXE,
PKZIPFIX.EXE (in the case of the PKZIP program), and MANUAL.DOC which
contains all the instructions on how to use the program. Now you can
unzip any .ZIP file you might want to download.
<page down> for more
Shareware continued
The next program you need to download after you get your decompression
programs, is a virus detection utility. A really popular one is John
McAfee's ViruScan. First use it to scan your hard drive, and also every
floppy disk you have, and then from then on, just scan everything you
download, and everything you buy, before you use it. And always keep the
most recent version of ViruScan, because the program won't find any vi-
ruses that weren't invented yet by the time it was written. If you have
an old version of ViruScan, it will protect you from old viruses, but not
from new ones! Just like a vaccination.
So that's all there is, to get tons of software at minimal cost. Just
download, decompress, scan for viruses, and take it for a test drive.
But if it's |nshareware|n, and you like it, and you intend to use it, please
send in the registration fee! The only thing that keeps |nshareware|n auth-
ors writing more programs, is if they made some money on the last one
they wrote.
Well what do you do with the .ZIP or .ARC or whatever file that you down-
<page down> for more
Shareware continued
loaded, after you've opened it up and gotten all of the files out of it?
Well you erase it from your hard drive, because it takes up a lot of hard
disk space for nothing. But wait! First, make sure to copy it to a disk
for safe-keeping. Not only because maybe you deleted the program's docu-
mentation file, and you might need it again later. Well if so, you just
get it back out of the compressed file which you copied to a floppy disk.
But the most important reason to save the compressed file on a |nfloppy|n, is
that eventually you'll need to upload the file to somewhere. You see, a
lot of BBSs keep an upload/download ratio. That means you're only allow-
ed to download a certain number of files from each BBS, before you have
to upload a file to them in exchange for what you got from them. Well if
you kept the files you downloaded from another |nBBS|n, you can upload them
to this |nBBS|n where your up/down ratio is no good. So if you kept the com-
pressed files on a |nfloppy|n disk, then you've got them handy, ready to up-
load whenever you need to.
You must not ever just zip up a bunch of files from your hard drive and
upload that. Because it is a copyright violation, to distribute part of
<page down> for more
Shareware continued
a program without every single bit of it just the way its author wanted
it distributed. And the only way to make sure you send all of the files
in their original form, is if you still have the .ZIP or .ARC or whatever
file in the form you downloaded it in. Because maybe there was a little
README.TXT file or a batch file that you knew you wouldn't need, and you
deleted it to save space. Or maybe the program has a little utility that
allows you to customize the program to your own favorite colors or some-
thing, and you did that. So if you were to compress the program back in-
to a .ZIP or .ARC or whatever file, and upload it, that would be illegal
because it's not in the original form anymore. Well all you have to do,
to avoid such problems, is copy every file you download, to floppy disks
before you delete them from your hard drive. It's not so bad, I have all
the files I've ever downloaded, sitting on just twelve 720K |ndisks|n.
Another thing that is a copyright violation, is to use one paid-for copy
of a software program, on more than one computer. Some authors allow it,
but most don't. If you want to use a program on two computers, you usu-
ally have to pay for two copies. This is true for both |nshareware|n and
commercial programs, and even for DOS itself.
The |tCHKDSK|t Command
This is a very useful command that performs many different functions.
The main thing it is supposed to do is CHecK the directory structure of
your DiSK. There are lots of things that can go wrong when the read/
write heads are writing to a disk. Any sort of disturbance can cause
the heads to not write what they were supposed to write, and |nCHKDSK|n can
find what problems may have been caused, and can also correct some of
them.
However, |nCHKDSK|n will only make corrections if the /F switch was specified
on the command line. If the /F switch was not given, and |nCHKDSK|n finds
any errors, it will say something like, "F parameter not specified, cor-
rections will not be written to disk". |nCHKDSK|n will continue to act like
it is making corrections, however, just to show you what corrections it
would have made if the /F switch had been specified. So if you like the
corrections, you can re-run the |nCHKDSK|n command with the /F switch and it
will actually write the corrections to the disk. With DOS version 5, do
not ever use the /F switch while any |sTSR|ss are in |smemory|s!
<page down> for more
CHKDSK continued
The most common error that |nCHKDSK|n finds is something like "4 lost chains
in 6 clusters". What that means is that there is some data on the disk
that has space allocated to it in the FAT, but that has no entries in the
directory. If you specify the /F switch, |nCHKDSK|n will convert those lost
chains to files, and give the files names like FILE0000.CHK and put them
into the root |ndirectory|n of the disk. Now what do you do with them?
Well, first look at them with the TYPE command or some other file brow-
ser. If they are nothing but strange symbols, then they must have been
.COM or .EXE files, and there is no way you can |nrecover|n them. Because it
is highly unlikely that the files are complete, and who knows what might
happen if you try to run a command file that is not complete. Just del-
ete those files.
If there is some recognizable text inside though, you should be able to
tell what application the lost chain was from. Just load it into that
application, and do your best to put the file back to the way it used to
be. It's usually better than losing the whole file.
<page down> for more
CHKDSK continued
Most often, though, these FILE0000.CHK files that |nCHKDSK|n makes are not
anything important at all. They're usually pieces of temp files that
some application was using, which would have been deleted by that app if
the app had been properly exited, but maybe your machine locked up and
you had to reboot, so the app didn't get a chance to delete its temp
files. Those will quite often end up as lost chains, and deleting them
is no problem.
Well as long as these lost clusters are sitting on your disk, they're
just taking up disk space for no reason. So you want to run the |nCHKDSK|n
command every week or so, to free up any space that might be in use by
these silly things.
Another error message that |nCHKDSK|n comes up with pretty often is "FILE1 is
cross-linked on cluster ##, FILE2 is cross-linked on cluster ##". This
means that both FILE1's and FILE2's FAT entries say that the two files
are using the same cluster of disk space. This is a |nFAT|n error that CHK-
DSK can't do anything about. You have to try to fix it yourself. You
<page down> for more
CHKDSK continued
must not ever try to run an executable file that has been cross-linked!
Just delete it. But if one or both of the files are non-executable,
there is hope for recovery. Just COPY the files to a different disk or
directory and delete them both from the original location. Now load the
files into whatever application created them and see how much data you
can save. One of the files will contain a cluster from the other file,
and also one or both of them may have been truncated (cut off) at the
point where the cross-linkage had occurred. But it's better than losing
both files altogether. Of course if they were both |nexecutable|n files then
it's a total loss. That's what |sbackup|ss are for.
So, what else is the |nCHKDSK|n command good for? Well, it gives you a real
nice summary of what's on your disk, as well as how much free RAM you
have. It can also give you a list of every file on the disk, if you use
the /V (verbose) switch. And that will include all the Hidden files too.
If you pipe the output of |nCHKDSK|n /V to the FIND command, you can find the
location of any file on your disk:
|nCHKDSK|n C:\|n*.*|n /V || |nFIND|n ".BAT"
<page down> for more
CHKDSK continued
would show you the full filespec for every .BAT file on the disk. But
remember, the FIND command is case-sensitive, and filenames are always
stored in all caps, so |nFIND|n ".bat" would not work at all.
Another thing the |nCHKDSK|n command can do is tell you whether you have any
|tfragmented|t files. What does that mean? Well, DOS stores files on a disk
a cluster at a time. A cluster, depending on the version of DOS the disk
was formatted with, and also the size of the disk, can be anywhere from
512 to 16384 bytes. Most hard disks have 2048-byte clusters. Well when
DOS is writing a file to disk, it puts down one cluster's worth of data
into the first available cluster on the disk, then it puts the second
cluster of the file into the second available cluster on the disk, then
it puts the third cluster of the file into the third available cluster on
the disk, etc. These clusters aren't necessarily next to each other on
the disk, and if they're not, then the file is said to be |nfragmented|n.
Your hard drive will appear to work faster if all the pieces of a file
are right next to each other, or in contiguous clusters. There are lots
of disk defragmenters on the market, and it's a very good idea to get one
<page down> for more
CHKDSK continued
and use it weekly.
If you can't yet afford to buy a disk defragmenter (often called a disk
optimizer) and you can't find a shareware one, another solution to frag-
mentation is to BACKUP the disk, FORMAT it, and RESTORE the files. This
is because any time you |nbackup|n or COPY a file to a blank disk, all the
pieces of the file are placed into contiguous clusters. Then when you
format that first disk, all the clusters become available again so when
you restore the files, they also stay in contiguous clusters. It's only
after you have deleted some file from the disk, that a space opens up in
the middle of the disk space so the next file that's written to the disk,
if it's longer than the file that got deleted, may become fragmented.
In order to make the |nCHKDSK|n command tell you about fragmentation on a
whole disk, you have to use the command on each directory separately.
For example, |nCHKDSK|n C:\*.* and |nCHKDSK|n C:\DOS\*.* and |nCHKDSK|n C:\UTIL\*.*,
et cetera.
Please see the last couple pages of the Cache chapter!
PLEASE IGNORE THIS PAGE!
|TMain Menu|T
|TEXIT|T|fSIMPLY2|f
|TFORMAT|T|fSIMPLY2|f
|TRAMDRIVE.SYS|T|fSIMPLY2|f
|TRESTORE|T|fSIMPLY2|f
|TSYS|T|fSIMPLY2|f
|TVDISK.SYS|T|fSIMPLY2|f
|tASCII|t|fSIMPLY2|f
|tBoo|1t Disk|t|fSIMPLY2|f
|tDisks|t|fSIMPLY2|f
|tEDLIN|t|fSIMPLY2|f
|tExecutable|t|fSIMPLY2|f
|tLow-Level|t|fSIMPLY2|f
|tMagnetism|t|fSIMPLY2|f
|tParameters|t|fSIMPLY2|f
|tPower|t|fSIMPLY2|f
|tRAMdisk|t|fSIMPLY2|f
|tReplaceable|t|fSIMPLY2|f
|tShelling Out|t|fSIMPLY2|f
|tVirtual Disk|t|fSIMPLY2|f
|tdisk full|t|fSIMPLY2|f
|tediting keys|t|fSIMPLY2|f
|tfloppy|t|fSIMPLY2|f
|TAPPEND|T|fSIMPLY3|f
|TASSIGN|T|fSIMPLY3|f
|TAUX|T|fSIMPLY3|f
|TAbout This Program|T|fSIMPLY3|f
|TBREAK|T|fSIMPLY3|f
|TBUFFERS|T|fSIMPLY3|f
|TCALL|T|fSIMPLY3|f
|TCHCP|T|fSIMPLY3|f
|TCLOCK$|T|fSIMPLY3|f
|TCLS|T|fSIMPLY3|f
|TCOM1|T|fSIMPLY3|f
|TCOMP|T|fSIMPLY3|f
|TCON|T|fSIMPLY3|f
|TCOPY|T|fSIMPLY3|f
|TCOUNTRY|T|fSIMPLY3|f
|TCTTY|T|fSIMPLY3|f
|TDATE|T|fSIMPLY3|f
|TDEBUG|T|fSIMPLY3|f
|TDEL|T|fSIMPLY3|f
|TDEVICEHIGH|T|fSIMPLY3|f
|TDEVIC|1E|T|fSIMPLY3|f
|TDIR|T|fSIMPLY3|f
|TDISKCOMP|T|fSIMPLY3|f
|TDO|1S|T|fSIMPLY3|f
|TERASE|T|fSIMPLY3|f
|TFOR|T|fSIMPLY3|f
|TGRAFTABL|T|fSIMPLY3|f
|TKEYB|T|fSIMPLY3|f
|TLPT1|T|fSIMPLY3|f
|TNLSFUNC|T|fSIMPLY3|f
|TNUL|T|fSIMPLY3|f
|TPRN|T|fSIMPLY3|f
|TSHIFT|T|fSIMPLY3|f
|TTIME|T|fSIMPLY3|f
|tBad command or filename|t|fSIMPLY3|f
|tDevice|1s|t|fSIMPLY3|f
|tPATH|t|fSIMPLY3|f
|tconcatenation|t|fSIMPLY3|f
|TCOMMAN|1D|T|fSIMPLY4|f
|TDOSKEY|T|fSIMPLY4|f
|TDRIVPARM|T|fSIMPLY4|f
|TECHO|T|fSIMPLY4|f
|TEDIT|T|fSIMPLY4|f
|TEMM386|T|fSIMPLY4|f
|TEXE2BIN|T|fSIMPLY4|f
|TEXPAND|T|fSIMPLY4|f
|TFASTOPEN|T|fSIMPLY4|f
|TFCBS|T|fSIMPLY4|f
|TFC|T|fSIMPLY4|f
|TFDISK|T|fSIMPLY4|f
|TFILES|T|fSIMPLY4|f
|TFIND|T|fSIMPLY4|f
|TGOTO|T|fSIMPLY4|f
|TGRAPHICS|T|fSIMPLY4|f
|THELP|T|fSIMPLY4|f
|TINSTALL|T|fSIMPLY4|f
|TLABEL|T|fSIMPLY4|f
|TLASTDRIVE|T|fSIMPLY4|f
|TLOADFIX|T|fSIMPLY4|f
|TLOADHIGH|T|fSIMPLY4|f
|TMKDIR|T|fSIMPLY4|f
|TMORE|T|fSIMPLY4|f
|tBIOS|t|fSIMPLY4|f
|tPark|t|fSIMPLY4|f
|tWrite-protect|t|fSIMPLY4|f
|TDOSSHELL|T|fSIMPLY5|f
|TGWBASIC|T|fSIMPLY5|f
|TJOIN|T|fSIMPLY5|f
|TMEM|T|fSIMPLY5|f
|TMIRROR|T|fSIMPLY5|f
|TMODE|T|fSIMPLY5|f
|TPAUSE|T|fSIMPLY5|f
|TPOST|T|fSIMPLY5|f
|TRECOVER|T|fSIMPLY5|f
|TREM|T|fSIMPLY5|f
|TRENAME|T|fSIMPLY5|f
|TREPLACE|T|fSIMPLY5|f
|TSELECT|T|fSIMPLY5|f
|TSHARE|T|fSIMPLY5|f
|TSTACKS|T|fSIMPLY5|f
|TTRUENAME|T|fSIMPLY5|f
|TUNDELETE|T|fSIMPLY5|f
|TUNFORMAT|T|fSIMPLY5|f
|TVERIFY|T|fSIMPLY5|f
|TVER|T|fSIMPLY5|f
|TVOL|T|fSIMPLY5|f
|t*.*|t|fSIMPLY5|f
|tBoot|t|fSIMPLY5|f
|tCOMMAND.COM|t|fSIMPLY5|f
|tReboot|t|fSIMPLY5|f
|tWildcards|t|fSIMPLY5|f
|TDRIVER.SYS|T|fSIMPLY6|f
|TPRINT|T|fSIMPLY6|f
|TQBASIC|T|fSIMPLY6|f
|TSETVER|T|fSIMPLY6|f
|TSORT|T|fSIMPLY6|f
|TSUBST|T|fSIMPLY6|f
|TSWITCHAR|T|fSIMPLY6|f
|TSWITCHES|T|fSIMPLY6|f
|TTREE|T|fSIMPLY6|f
|TTYPE|T|fSIMPLY6|f
|tAbort, Retry, Fail, Ignore|t|fSIMPLY6|f
|tCONFIG.SYS|t|fSIMPLY6|f
|tCleaning|t|fSIMPLY6|f
|tFAT|t|fSIMPLY6|f
|tKeyboard|t|fSIMPLY6|f
|tLogical Drives|t|fSIMPLY6|f
|tRedirection|t|fSIMPLY6|f
|tTSR|t|fSIMPLY6|f
|tbinary|t|fSIMPLY6|f
|tdecimal|t|fSIMPLY6|f
|thexadecimal|t|fSIMPLY6|f
|TERRORLEVEL|T|fSIMPLY5|f
|TEXIST|T|fSIMPLY5|f
|TIF|T|fSIMPLY5|f
|TNOT|T|fSIMPLY5|f
|TSMARTDRV.SYS|T|fSIMPLY4|f
|TXCOPY|T|fSIMPLY2|f
|tBatch File|t|fSIMPLY7|f
|tDevice Driver|t|fSIMPLY3|f
|tFile Creation Error|t|fSIMPLY2|f
|tPROMPT|t|fSIMPLY6|f
|TWhat Is DOS?|T|fSIMPLY4|f
|TTrademarks|T|fSIMPLY3|f